package com.deliccio.service.impl;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.deliccio.dao.ColumnaDAO;
import com.deliccio.dao.EstadosgeneralesDAO;
import com.deliccio.dao.GridDAO;
import com.deliccio.dao.SucursalesDAO;
import com.deliccio.dao.UbicacionDAO;
import com.deliccio.entitys.Columna;
import com.deliccio.entitys.Estadosgenerales;
import com.deliccio.entitys.Grid;
import com.deliccio.entitys.Sucursales;
import com.deliccio.entitys.Ubicacion;
import com.deliccio.entitys.Usuario;
import com.deliccio.service.MantenimientoSucursalesService;
import com.deliccio.util.Constantes;
import com.deliccio.util.Util;

@Service("MantenimientoSucursalesService")
public class MantenimientoSucursalesServiceImpl implements MantenimientoSucursalesService{

	
	@Autowired
	private GridDAO gridDAO;
	
	@Autowired
	private SucursalesDAO sucursalesDAO;

	@Autowired
	private UbicacionDAO ubicacionDAO;
	
	@Autowired
	private EstadosgeneralesDAO estadosgeneralesDAO;
	
	@Autowired
	private ColumnaDAO columnaDAO;
	
	@Override
	public Map<String,Object> obtenerDataSucursales(
			Usuario usuario,int codGrid,String sidx,String sord,int page,int rows,
			boolean _search,String searchField,String searchOper,String searchString){		
		Grid grid=	gridDAO.get(codGrid);
		List<Columna> columnas=columnaDAO.obtenerporGrid(grid);
		grid.setColumnaList(columnas);
		
		
		if(grid!=null){
			if(grid.getColumnaList()!=null && grid.getColumnaList().size()>0){
				Map<String,Object> objeto=new HashMap<String,Object>();				
				int count = gridDAO.getCantidadDataRows(grid,usuario,codGrid,sidx,sord,page,rows,_search,searchField,searchOper,searchString);				
				int total=0;
				int records=0;
				if(count>0){
					total=count/rows+1;
				}
				List<Map<String,Object>> data=gridDAO.getData(grid,usuario,codGrid,sidx,sord,page,rows,_search,searchField,searchOper,searchString);
				objeto.put("page",page);
				objeto.put("total",total);
				if(data!=null){
					records=data.size();
				}			
				objeto.put("records",records);
				objeto.put("data",data);				
				return objeto;
			}
		}
		return null;
	}
	
	@Override
	public Grid obtenerGridporCod(Integer cod){
		Grid g=gridDAO.obtenerPorCodigoTabla(cod);
		List<Columna> columnas=columnaDAO.obtenerporGrid(g);
		g.setColumnaList(columnas);	
		return g;
	}

	@Override
	public Sucursales buscarSucursal(int idsucursal) {
		return sucursalesDAO.buscarxId(idsucursal);
	}

	@Transactional
	public int guardarSucursal(Sucursales sucursal){		
		Ubicacion ubi = ubicacionDAO.get(sucursal.getUbicacion().getId());
		if (ubi==null)
			ubi = new Ubicacion();
		ubi.setLatitud(sucursal.getUbicacion().getLatitud());
		ubi.setLongitud(sucursal.getUbicacion().getLongitud());
		ubicacionDAO.guardar(ubi);	
		
		Sucursales suc = sucursalesDAO.get(sucursal.getId());
		if (sucursal.getId()==null){
			suc = new Sucursales();
			suc.setFecRegistro(new Date());
			suc.setCodigo(Util.generarCodigo(Sucursales.class.getName(), ""));
		}			
		suc.setNombre(sucursal.getNombre());
		suc.setTelefono(sucursal.getTelefono());		
		suc.setDireccion(sucursal.getDireccion());				
		suc.setEstadosgenerales(sucursal.getEstadosgenerales());
		suc.setUbicacion(ubi);
		sucursalesDAO.guardar(suc);
		return suc.getId();
	}

	@Override
	public List<Estadosgenerales> obtenerEstado() {
		return estadosgeneralesDAO.obtenerEstadoPorTabla(Constantes.ESTADOS_SUCURSALES);
	}
}
